package com.myopen.interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.Record;
import com.myopen.config.ConstConfig;
import com.myopen.model.Website;

/**
 * 用于拦截域名，判断用户
 * @author wangsanfei
 *
 *	通过访问域名，判断用户访问的是哪个网站
 *
 */
public class CmsInterceptor implements Interceptor{

	@Override
	public void intercept(Invocation inv) {
		String serverName=inv.getController().getRequest().getServerName();
		
		//System.out.println(serverName);
		
		Record website=(Record)inv.getController().getSession().getAttribute(ConstConfig.SESSION_WEBSIT);
		if(website==null) {
			
			//之前发现的问题，后台如果用另外的域名登录的话，会出现错误，比如本来是a网站的管理员，用了b网站的域名登录，就会出现问题，所以如果是后台管理员登录的话 应该通过角色来，
			//权限做的更好的话，要双向匹配，如果该用户没有该域名的权限，那么就不应该走下去。
			//暂时放在登录的时候解决这个问题
			
			//如果当前session是空的话，那么取一下
			String appHost=PropKit.get("app.host");
			if(serverName.endsWith(appHost)) {
				//如果是二级域名，那么通过二级域名做匹配
				String sld=serverName.substring(0, serverName.lastIndexOf(appHost)-1);
				
				//System.out.println(sld);
				
				//如果serverName以appHost结尾，说明用的是二级域名,那么去数据库比对
				website=Website.dao.getMyWebsiteBySld(sld);
			}else {
				//如果不是二级域名，通过全域名做匹配
				website=Website.dao.getMyWebsiteByDomain(serverName);
			}
			
			Record currUser=(Record)inv.getController().getSession().getAttribute(ConstConfig.SESSION_ADMIN_USER);
			if(currUser!=null) {
				//如果不能于空的时候要判断，当前用户所属网站于域名是否相同
				Record userWebsite=Website.dao.getMyWebsite(currUser.getStr("id"));
				if(!website.getStr("id").equals(userWebsite.getStr("id"))) {
					inv.getController().renderText("该网站您没有权限访问。。。");
					return;
				}
			}
			
			inv.getController().getSession().setAttribute(ConstConfig.SESSION_WEBSIT,website);
		}
		
		if(website==null) {
			inv.getController().renderText("您的域名尚未绑定。。。");
		}else {
			if("WEBSITE_STATUS_01".equals(website.getStr("status"))){
				inv.getController().renderText("该网站暂时不能访问，请联系管理员。。。");
			}else {
				inv.invoke();
			}
		}
		
	}

}
